package Year2013;

import java.math.BigInteger;

/**
 * 2
 * 题目标题: 排它平方数
 * 小明正看着 203879 这个数字发呆。
 * 原来，203879 * 203879 = 41566646641
 * 这有什么神奇呢? 仔细观察，203879
 * 是个6位数，并且它的每个数位上的数字都是不同的，并且它平方后的所有数位上都不出现组成它自身的数字。
 * 具有这样特点的6位数还有一个，请你找出它!
 * 再归纳一下筛选要求:
 *      1. 6位正整数
 *      2. 每个数位上的数字不同
 *      3. 其平方数的每个数位不含原数字的任何组成数位王
 * 答案是一个6位的正整数。
 */
public class A组_排他平方数 {
    public static void main(String[] args) {
        for (int i = 100000; i < 999999; i++) {
            if(i % 10 != 0  && i % 10 != 1 && i % 10 != 5 && i % 10 != 6){
                if(check(i) == true)
                    System.out.println(i);
            }
        }
        getNumber(123456);
    }
    public static boolean check(int i){
        boolean isOk = false;

        return isOk;
    }
    public static int[] getNumber(int i){
        int[] result = new int[100]; // 结果数组
        int[] a = new int[100];      // 原数组
        int[] temp = new int[100];   // 中间数组
        for (int j = 0; j < 100; j++) {
            result[j] = 0;
            a[j] = 0;
        }
        int k = 0;
        while (i > 0){
            a[k] = i % 10;
            i = i / 10;
            k++;
        }
        for (int j = 0; j < 6; j++) {
            System.out.print(a[j]+"\t");
        }
        System.out.println();
        for (int j = 0; j < 6; j++) {
            System.out.print(a[j]+"\t");
        }
        System.out.println();
        for (int j = 0; j < 6; j++) {
            int scope = 0;
            for (int l = 0; l < 6; l++) {
                temp[l] = (a[j] * a[l] + scope)%10;
                scope   = (a[j] * a[l] + scope)/10;
            }
            temp[6] = scope;
            System.out.print("temp:   ");
            for (int l = 0; l < 7; l++) {
                System.out.print(temp[l] + "\t");
            }
            System.out.println();
            int scope1 = 0;
            for (int l = 0; l < 6; l++) {
                System.out.print(result[l]+"\t");
            }
            System.out.println();
            for (int l = 0; l < 7; l++) { // j 偏移量
                result[l] = (result[l] + temp[l] + scope1) % 10;
                scope1      = (result[j+l] + temp[l] + scope1) / 10;
            }
            result[j+6] = scope1;
            System.out.print("result: ");
            for (int m = 0; m < 20; m++) {
                System.out.print(result[m]+"\t");
            }
            System.out.println();
            System.out.println();
        }
        System.out.println();
        for (int j = 0; j < 20; j++) {
            System.out.print(result[j]+"\t");
        }
        return a;
    }
}
